// const Message = (function () {
//   let instance;

//   class Msg {
//     constructor(config) {
//       const baseConfig = {
//         color: "red",
//         timeOut: 3000,
//       };

//       console.log(config);
//       this.config = Object.assign(baseConfig, config);
//     }

//     success(msg) {
//       this.config.color = "green";
//       this.msg = msg;
//       this.print("success", msg);
//     }

//     error(msg) {
//       this.config.color = "red";
//       this.msg = msg;
//       this.print("error", msg);
//     }

//     print(type) {
//       console.log(
//         type,
//         "::",
//         "color=",
//         this.config.color,
//         "msg=",
//         this.msg,
//         "timeOut=",
//         this.config.timeOut
//       );
//     }
//   }

//   return function (config = {}) {
//     if (!instance) {
//       instance = new Msg(config);
//     }
//     return instance;
//   };
// })();

// const $message = Message({ timeOut: 5000 });

// $message.success("成功信息！");
// $message.error("错误信息！");

// console.log(
//   "Message({ timeOut: 5000 }) === Message({ timeOut: 8000 }) : ",
//   Message({ timeOut: 5000 }) === Message({ timeOut: 8000 })
// );
// console.log("$message.config.timeOut :", $message.config.timeOut);

// const $message2 = Message({ timeOut: 8000 });
// console.log("$message === $message2 : ", $message === $message2);
// console.log("$message2.config.timeOut : ", $message2.config.timeOut);

class MessageClass {
  constructor(config) {
    if (!MessageClass.instance) {
      const baseConfig = {
        color: "red",
        timeOut: 3000,
      };

      this.config = Object.assign(baseConfig, config);
      MessageClass.instance = this;
    }
    return MessageClass.instance;
  }

  success(msg) {
    this.config.color = "green";
    this.msg = msg;
    this.print("success", msg);
  }

  error(msg) {
    this.config.color = "red";
    this.msg = msg;
    this.print("error", msg);
  }

  print(type) {
    console.log(
      type,
      "::",
      "color=",
      this.config.color,
      "msg=",
      this.msg,
      "timeOut=",
      this.config.timeOut
    );
  }
}

const Message = new MessageClass({ timeOut: 5000 });
const Message2 = new MessageClass({ timeOut: 8000 });

Message.success("成功消息！");
Message.error("错误消息！");
Message2.success("成功消息！");
Message2.error("错误消息！");
console.log("Message === Message2 : ", Message === Message2);
